#include <iostream>

double squared(double x) {
	return x * x;
}

struct point {
	point(double x = 0, double y = 0): x_(x), y_(y) {};

	double x() {
		return x_;
	}

	double y() {
		return y_;
	}

private:
	double x_, y_;
};

double squared_distance(point& a, point& b) {
	return squared(a.x() - b.x()) + squared(a.y() - b.y());
}

struct segment {
	segment(point a, point b): a_(a), b_(b) {};

	double A() {
		return b_.y() - a_.y();
	}

	double B() {
		return a_.x() - b_.x();
	}

	double C() {
		return b_.x() * a_.y() - a_.x() * b_.y();
	}

	double squared_length() {
		return squared(A()) + squared(B());
	}

	point& a() {
		return a_;
	}

	point& b() {
		return b_;
	}

private:
	point a_, b_;
};

double squared_distance(point& p, segment& s) {
	double squared_distance_to_line = squared(s.A() * p.x() + s.B() * p.y() + s.C()) / s.squared_length();
	double squared_max = squared_distance(p, s.a());
	double squared_min = squared_distance(p, s.b());

	if (squared_max < squared_min) {
		std::swap(squared_min, squared_max);
	}

	if (squared_max - squared_distance_to_line > s.squared_length()) {
		return squared_min;
	} else {
		return squared_distance_to_line;
	}
}

size_t n;
double eps;
point* points;
bool* used;

size_t simplify(size_t l, size_t r) {
	size_t m = 0;
	segment s = segment(points[l], points[r]);

	double max = 0;
	for (size_t i = l + 1; i < r; ++i) {
		double distance = squared_distance(points[i], s);

		if ((max < distance) && (distance > eps)) {
			max = distance;
			m = i;
		}
	}

	if (max != 0) {
		used[m] = true;
		size_t result = 1;

		result += simplify(l, m);
		result += simplify(m, r);

		return result;
	} else {
		return 0;
	}
}

size_t simplify() {
	for (size_t i = 0; i < n; ++i) {
		used[i] = false;
	}

	used[0] = true;
	used[n - 1] = true;
	return simplify(0, n - 1) + 2;
}

int main() {
	std::cin >> n;
	points = new point[n];

	double x, y;
	for (size_t i = 0; i < n; i++) {
		std::cin >> x >> y;
		points[i] = point(x, y);
	}
	std::cin >> eps;

	used = new bool[n];
	std:: cout << simplify() << "\n";

	for (size_t i = 0; i < n; i++) {
		if (used[i]) {
			std::cout << i + 1 << " ";
		}
	}

	delete[] points;
	delete[] used;

	return 0;
}
